// class Single{
//   show(){
//     console.log('我是一个');
//   }
//   static getInstance(){
//     if (!Single.instance) {
//       Single.instance=new Single()
//     }
//     return Single.instance
//   }
// }
// const s1=new Single.getInstance()
// const s2=new Single.getInstance()


class Single {
  show() {
    console.log('我是一个单例对象');
  }
}
Single.getInstance(function () {
  let instance = null
  return function () {
    if (!instance) {
      instance = new Single()
    }
    return instance
  }
})()  //自执行函数
// 闭包外部函数将内部函数返回出来使用，上下执行文不会被销毁，内部函数对外部函数的变量依然存在引用，这些引用变量的集合就形成闭包
// 内部函数被返回出去，不受外部函数掌控，等内部函数执行完，外部才算执行完
// let const词法环境   var在变量环境 

const s1 = Single.getInstance()
const s2 = Single.getInstance()
console.log(s1 === s2);